package com.azdebugit.lru.test; /**
 * http://blog.csdn.net/yangpl_tale/article/details/44998365
 * http://flychao88.iteye.com/blog/1977653
 *
 * LRU是一种淘汰策略，就是内存达到容量后，最近未使用的就扔掉，
 * linkedHashMap 正常是不限量的不删除元素，
 * 可是若是继承linkedHashMap,设置他的容量就能够LRU
 * Created by jalo on 2017/11/9.
 */
import java.util.*;

//扩展一下LinkedHashMap这个类，让他实现LRU算法
class LRULinkedHashMap<K,V> extends LinkedHashMap<K,V>{
    //定义缓存的容量
    private int capacity;
    private static final long serialVersionUID = 1L;
    //带参数的构造器
    LRULinkedHashMap(int capacity){
        //调用LinkedHashMap的构造器，传入如下参数
        super(16,0.75f,true);
        //传入指定的缓存最大容量
        this.capacity=capacity;
    }
    //实现LRU的关键方法，若是map里面的元素个数大于了缓存最大容量，则删除链表的顶端元素
    @Override
    public boolean removeEldestEntry(Map.Entry<K, V> eldest){
        System.out.println("移除旧元素eldest----"+eldest.getKey() + "=" + eldest.getValue());
        return size()>capacity;
    }
}